<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <!-- 导入 vue 文件 -->
    <script src="./lib/vue_2.5.22.js"></script>
    <!-- 导入路由 -->
    <script src="./lib/vue-router_3.0.2.js"></script>
</head>

<body>
    <!-- 被 vue 实例控制的 div 区域 -->
    <div id="app">
        <!-- router-link 是 Vue 中提供的标签， 默认会被渲染为 a 标签 -->
        <!-- to 的属性值默认会被渲染为 # 号开头的hash 地址 -->
        <!-- to属性默认会被渲染为  href 属性 -->
        <router-link to="/user">user</router-link>
        <router-link to="/register">resgister</router-link>

        <!-- 路由填充位（也叫做路由占位符） -->
        <!-- 将来通过路由规则匹配到的组件， 将会被渲染到 <router-vie></router-vie> 所在的位置 -->
        <router-view></router-view>
    </div>
    <script>
        Vue.config.productionTip = false
    </script>

    <script>
        // 定义两个路由组件
        const User = {
            template: '<h1>User组件</h1>'
        }
        const Register = {
            template: '<h1>Register组件</h1>'
        }

        // 创建路由实例对象
        const router = new VueRouter({
            // routes是路由的规则数组
            routes: [
                // 每个路由规则都是一个配置对象，  其中至少包含 path 和 component 两个属性：
                // path 表示当前路由规则匹配的 hash 地址 
                // component【它只接收对象，不接收字符串】 表示当前路由规则对应要展示的组件
                // 下面是所有的路由的规则！
                {
                    path: '/',
                    redirect: '/register'
                },
                {
                    path: '/user',
                    component: User,
                    beforeEnter: (to, from, next) => {
                        next(false); // next 里面不添加任何参不添加人任何参数就代表不对这个路由进行拦截 加上false就会进行拦截！
                    }
                }, {
                    path: '/register',
                    component: Register
                },
            ]
        })

        // 下面是全局注册导航首位前置守卫 可以通过next是否可以进入到目标路由！
        // router.beforeEach((to, from, next) => {
        //     // to and from are both route objects. must call `next`.
        //     // next(false);
        //     // 我还没有加上上面的next他就已经把握的请求全部拦截了!恐怖！

        // })
        // router.beforeEach((to, from, next) => {
        //     // next(false); // 可以通过控制ncext是否可以进如到我们的目标路由!S
        // })

        // 上面一种是全局的导航守卫
        // 还可以实现路由的导航守卫！使用beforeEnter


        // #region vue 实例对象
        const vm = new Vue({
            el: '#app',
            data: {},
            // 为了能让路由规则生效， 必须把路由对象挂载到 Vue 实例对象上！
            // 挂载路由实例对象
            router: router
        })
    </script>
</body>

</html>